package com.dyrj.jzb.demo;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.dyrj.jzb.po.Po6010CustAcctIdBalanceQuery;
import com.dyrj.jzb.po.Po6010CustAcctIdBalanceQueryAcctArray;
import com.dyrj.ysk.util.FakeDataUtil;
import com.pabank.sdk.PABankSDK;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ApiTest {

    //资金汇总账号（FundSummaryAcctNo） 监管账户----平安银行电子商务交易资金待清算专户(乐彩农牧生猪采购平台)
    private static String FundSummaryAcctNo = "15000121182473";
    //商户号（MrchCode）
    private static String MrchCode = "3947";
    //文件传输用户名（用户短号）uid
    private static String uid = "O10556";
    //见证子账户的账号
    //{TxnReturnCode=000000, TxnReturnMsg=交易成功, ReservedMsg=, CnsmrSeqNo=C256341801183669951236, SubAcctNo=3947000000001008}
    private static String SubAcctNo = "3947000000001008";
    //交易网会员代码
    private static String TranNetMemberCode = "216090931";

    private static String MemberName = "";

    public static void main(String[] args) throws IOException {

        // 初始化配置
        PABankSDK.init("conf/config.properties");
        // a.验证开发者
        PABankSDK.getInstance().approveDev();
        // JSON请求报文(此处请求报文为示例，需根据接口文档中字段组装对应接口的json报文)，系统流水号（CnsmrSeqNo）必输，规范：6位uid(文件传输用户短号)+6位系统日期(YYMMDD)+10位随机数。
//        String req = reqParasOpenCustAcctId();
//        String req = reqParasQueryCustAcctIdByThirdCustId();
        String req = reqParasCustAcctIdBalanceQuery();
        // b.交易测试，传入参数服务ID(此处服务ID为示例，需根据调用接口配置为对应服务ID,服务ID在接口文档中查看)，JSON报文流水号字段需传入22位
//        Map<String, Object> returnMap=PABankSDK.getInstance().apiInter(req,"OpenCustAcctId");
//        Map<String, Object> returnMap=PABankSDK.getInstance().apiInter(req,"QueryCustAcctIdByThirdCustId");
        Map<String, Object> returnMap= PABankSDK.getInstance().apiInter(req,"CustAcctIdBalanceQuery");
        // b.交易测试，提供流水号拼接方法，JSON报文流水号字段只需传入10位随机数
        //Map<String, Object> returnMap=PABankSDK.getInstance().newApiInter(req,"TranInfoQuery");
        System.err.println(returnMap);
        String str_rtnv = JSON.toJSONString(returnMap);
        Po6010CustAcctIdBalanceQuery po6010_rtnv = JSON.parseObject(str_rtnv,Po6010CustAcctIdBalanceQuery.class);
        System.out.println(po6010_rtnv.getAcctArray().size());



//        JSONArray list_ary =  (JSONArray)returnMap.get("AcctArray");
//        List<Po6010CustAcctIdBalanceQueryAcctArray> list_data = list_ary.toJavaList(Po6010CustAcctIdBalanceQueryAcctArray.class);
//        System.out.println(list_data);

    }

    /**
     * KFEJZB6000	会员子账户开立	OpenCustAcctId
     * @return
     */
    public static String reqParasOpenCustAcctId(){

        HashMap paraKeyDict = new HashMap();

        String CnsmrSeqNo = FakeDataUtil.randomCnsmrSeqNo(uid);

        //开放平台公共字段
//        paraKeyDict.put("CnsmrSeqNo","C256341801183669951236"); 		//交易流水号 系统流水号，规范：用户短号（6位）+日期（6位）+随机编号（10位）例：C256341801183669951236
        paraKeyDict.put("CnsmrSeqNo",CnsmrSeqNo); 		//交易流水号 系统流水号，规范：用户短号（6位）+日期（6位）+随机编号（10位）例：C256341801183669951236
//        paraKeyDict.put("CnsmrSeqNo","O10556200910F6LSzVFwbc"); 		//交易流水号 系统流水号，规范：用户短号（6位）+日期（6位）+随机编号（10位）例：C256341801183669951236
        paraKeyDict.put("MrchCode",MrchCode); 			//商户号  签约客户号，见证宝产品此字段为必输

        paraKeyDict.put("FunctionFlag","1"); 			//功能标志 1:开户  3:销户  4: 为存量见证子帐号申请智能收款子账号
        paraKeyDict.put("FundSummaryAcctNo",FundSummaryAcctNo);		//资金汇总账号 银行提供的以11或15开头的14位账号。例如：15000092460481
        paraKeyDict.put("TranNetMemberCode",TranNetMemberCode);		//交易网会员代码 平台端的用户ID，需要保证唯一性，可数字字母混合，如HY_120，若需要开通智能收款要求后6位是数字，该6位数字为智能收款账号后6位，因账号前几位固定故后6位不能重复。
        paraKeyDict.put("MemberProperty","00");		    //会员属性 00-普通子账户(默认)  SH-商户子账户
        paraKeyDict.put("UserNickname","测试1");		    //用户昵称
        paraKeyDict.put("Mobile","18554721259");		   		    //手机号码
        paraKeyDict.put("Email","53620583@qq.com");		   		    //邮箱
        paraKeyDict.put("ReservedMsg","");		   		//保留域

        String rtnv = JSON.toJSONString(paraKeyDict);
        return rtnv;
    }

    /**
     * KFEJZB6092	根据会员代码查询会员子账号	QueryCustAcctIdByThirdCustId
     * 根据在平台的会员ID查询银行的子账户号。
     * @return
     */
    public static String reqParasQueryCustAcctIdByThirdCustId(){

        HashMap paraKeyDict = new HashMap();

        String CnsmrSeqNo = FakeDataUtil.randomCnsmrSeqNo(uid);

        //开放平台公共字段
        paraKeyDict.put("CnsmrSeqNo",CnsmrSeqNo); 		//交易流水号 系统流水号，规范：用户短号（6位）+日期（6位）+随机编号（10位）例：C256341801183669951236
        paraKeyDict.put("MrchCode",MrchCode); 			//商户号  签约客户号，见证宝产品此字段为必输

        paraKeyDict.put("FundSummaryAcctNo",FundSummaryAcctNo);		//资金汇总账号 银行提供的以11或15开头的14位账号。例如：15000092460481
        paraKeyDict.put("TranNetMemberCode",TranNetMemberCode);		//交易网会员代码 平台端的用户ID，需要保证唯一性，可数字字母混合，如HY_120，若需要开通智能收款要求后6位是数字，该6位数字为智能收款账号后6位，因账号前几位固定故后6位不能重复。
        paraKeyDict.put("ReservedMsg","");		   		//保留域

        String rtnv = JSON.toJSONString(paraKeyDict);
        return rtnv;
    }

    /**
     * KFEJZB6066	会员绑定提现账户-银联鉴权	BindRelateAcctUnionPay
     * @return
     */

    public static String reqParasBindRelateAcctUnionPay(){

        HashMap paraKeyDict = new HashMap();

        String CnsmrSeqNo = FakeDataUtil.randomCnsmrSeqNo(uid);
        //开放平台公共字段
        paraKeyDict.put("CnsmrSeqNo",CnsmrSeqNo); 		//交易流水号 系统流水号，规范：用户短号（6位）+日期（6位）+随机编号（10位）例：C256341801183669951236
        paraKeyDict.put("MrchCode",MrchCode); 			//商户号  签约客户号，见证宝产品此字段为必输

        paraKeyDict.put("FundSummaryAcctNo",FundSummaryAcctNo);		//资金汇总账号 银行提供的以11或15开头的14位账号。例如：15000092460481
        paraKeyDict.put("SubAcctNo",SubAcctNo);		//见证子账户的账号
        paraKeyDict.put("TranNetMemberCode",TranNetMemberCode);		//交易网会员代码
        paraKeyDict.put("MemberName",MemberName);		//交易网会员代码

        paraKeyDict.put("MemberProperty","00");		    //会员属性 00-普通子账户(默认)  SH-商户子账户
        paraKeyDict.put("UserNickname","测试1");		    //用户昵称
        paraKeyDict.put("Mobile","18554721259");		   		    //手机号码
        paraKeyDict.put("Email","53620583@qq.com");		   		    //邮箱
        paraKeyDict.put("ReservedMsg","");		   		//保留域

        String rtnv = JSON.toJSONString(paraKeyDict);
        return rtnv;
    }


    /**
     * KFEJZB6010	查询银行子账户余额	CustAcctIdBalanceQuery
     * 查询会员子账户以及平台的功能子账户的余额。
     * @return
     */
    public static String reqParasCustAcctIdBalanceQuery(){
        String CnsmrSeqNo = FakeDataUtil.randomCnsmrSeqNo(uid);
        String SubAcctNo = "3947000000001008";
        Po6010CustAcctIdBalanceQuery po6010 = new Po6010CustAcctIdBalanceQuery();
        //开放平台公共字段
        po6010.setCnsmrSeqNo(CnsmrSeqNo);
        po6010.setMrchCode(MrchCode);
        //接口参数
        po6010.setFundSummaryAcctNo(FundSummaryAcctNo);
        po6010.setSubAcctNo(SubAcctNo);
        po6010.setQueryFlag("2");
        po6010.setPageNum("1");
        po6010.setReservedMsg("");
        String rtnv = po6010.getReqPara();
        return rtnv;
    }


}
